package com.dify.knowledge.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Builder;
import lombok.Data;

/**
 * Dify文档上传请求DTO
 */
@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DifyDocumentRequest {
    
    /**
     * 文档名称
     */
    private String name;
    
    /**
     * 文档文本内容
     */
    private String text;
    
    /**
     * 索引方式
     */
    @JsonProperty("indexing_technique")
    @Builder.Default
    private String indexingTechnique = "high_quality";
    
    /**
     * 处理规则
     */
    @JsonProperty("process_rule")
    private ProcessRule processRule;
    
    @Data
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class ProcessRule {
        /**
         * 分段模式：automatic、custom 或 hierarchical
         */
        private String mode;
        
        /**
         * 分段规则（可选，mode为automatic时可以不提供）
         */
        private Rules rules;
        
        @Data
        @Builder
        public static class Rules {
            /**
             * 预处理规则数组
             */
            @JsonProperty("pre_processing_rules")
            private java.util.List<PreProcessingRule> preProcessingRules;
            
            /**
             * 分段器
             */
            private Segmentation segmentation;
            
            @Data
            @Builder
            public static class PreProcessingRule {
                /**
                 * 规则ID
                 */
                private String id;
                
                /**
                 * 是否启用
                 */
                @Builder.Default
                private Boolean enabled = true;
            }
            
            @Data
            @Builder
            public static class Segmentation {
                /**
                 * 分隔符
                 */
                private String separator;
                
                /**
                 * 最大分段长度
                 */
                @JsonProperty("max_tokens")
                @Builder.Default
                private Integer maxTokens = 500;
            }
        }
    }
}
